പ്രോഗ്രസ്സീവ് വെബ് ആപ്പ് ആർക്കിടെക്ചർ: ജാവാസ്ക്രിപ്റ്റ് സർവീസ് വർക്കർ പാറ്റേണുകൾ | MLOG | MLOG

4. നെറ്റ്‌വർക്ക്-ഒൺലി (Network-Only)

നെറ്റ്‌വർക്ക്-ഒൺലി സ്ട്രാറ്റജി എല്ലായ്പ്പോഴും നെറ്റ്‌വർക്കിൽ നിന്ന് അസറ്റുകൾ ലഭ്യമാക്കുന്നു, കാഷെയെ പൂർണ്ണമായും ഒഴിവാക്കുന്നു. ഒരു റിസോഴ്സിൻ്റെ ഏറ്റവും പുതിയ പതിപ്പ് നിങ്ങൾക്ക് അത്യാവശ്യമായി ആവശ്യമുള്ളപ്പോഴും കാഷിംഗ് ആവശ്യമില്ലാത്തപ്പോഴും ഈ സ്ട്രാറ്റജി ഉപയോഗിക്കുന്നു.

ഉദാഹരണം:

            
self.addEventListener('fetch', event => {
  event.respondWith(
    fetch(event.request)
  );
});

            

5. സ്റ്റെയിൽ-വൈൽ-റീവാളിഡേറ്റ് (Stale-While-Revalidate)

സ്റ്റെയിൽ-വൈൽ-റീവാളിഡേറ്റ് സ്ട്രാറ്റജി കാഷെ ചെയ്ത അസറ്റ് ഉടനടി നൽകുകയും, അതേസമയം നെറ്റ്‌വർക്കിൽ നിന്ന് ഏറ്റവും പുതിയ പതിപ്പ് ലഭ്യമാക്കുകയും ചെയ്യുന്നു. നെറ്റ്‌വർക്ക് അഭ്യർത്ഥന പൂർത്തിയായാൽ, കാഷെ പുതിയ പതിപ്പ് ഉപയോഗിച്ച് അപ്‌ഡേറ്റ് ചെയ്യപ്പെടുന്നു. ഈ സ്ട്രാറ്റജി വേഗതയേറിയ പ്രാരംഭ പ്രതികരണം നൽകുന്നു, ഒപ്പം ഉപയോക്താവിന് ഒടുവിൽ ഏറ്റവും പുതിയ ഉള്ളടക്കം ലഭിക്കുന്നുവെന്ന് ഉറപ്പാക്കുകയും ചെയ്യുന്നു. വേഗതയ്ക്ക് പ്രാധാന്യമുള്ള, അത്ര പ്രാധാന്യമില്ലാത്ത ഉള്ളടക്കത്തിന് ഇത് ഒരു ഉപയോഗപ്രദമായ സ്ട്രാറ്റജിയാണ്.

ഉദാഹരണം:

            
self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request)
      .then(response => {
        const fetchPromise = fetch(event.request).then(networkResponse => {
          caches.open('my-cache').then(cache => {
            cache.put(event.request, networkResponse.clone());
            return networkResponse;
          });
        });
        return response || fetchPromise;
      })
  );
});

            

6. കാഷെ, പിന്നെ നെറ്റ്‌വർക്ക് (Cache, then Network)

സ്റ്റെയിൽ-വൈൽ-റീവാളിഡേറ്റിന് സമാനമാണ്, എന്നാൽ കാഷെ ചെയ്ത അസറ്റ് ഉടനടി നൽകുന്നില്ല. ഇത് ആദ്യം കാഷെ പരിശോധിക്കുന്നു, അസറ്റ് ഉണ്ടെങ്കിൽ മാത്രം നെറ്റ്‌വർക്ക് അഭ്യർത്ഥന കാഷെ അപ്‌ഡേറ്റ് ചെയ്യുന്നതിനായി പശ്ചാത്തലത്തിൽ നടക്കുന്നു.

ശരിയായ കാഷിംഗ് സ്ട്രാറ്റജി തിരഞ്ഞെടുക്കൽ

നിങ്ങളുടെ ആപ്ലിക്കേഷൻ്റെ പ്രത്യേക ആവശ്യകതകളെ ആശ്രയിച്ചിരിക്കും അനുയോജ്യമായ കാഷിംഗ് സ്ട്രാറ്റജി. താഴെ പറയുന്ന ഘടകങ്ങൾ പരിഗണിക്കുക:

അനുയോജ്യമായ കാഷിംഗ് സ്ട്രാറ്റജികൾ ശ്രദ്ധാപൂർവ്വം തിരഞ്ഞെടുക്കുന്നതിലൂടെ, ഓഫ്‌ലൈൻ സാഹചര്യങ്ങളിൽ പോലും നിങ്ങളുടെ PWA-യുടെ പ്രകടനവും ഉപയോക്തൃ അനുഭവവും ഗണ്യമായി മെച്ചപ്പെടുത്താൻ കഴിയും. വർക്ക്ബോക്സ് ([https://developers.google.com/web/tools/workbox](https://developers.google.com/web/tools/workbox)) പോലുള്ള ടൂളുകൾക്ക് ഈ സ്ട്രാറ്റജികളുടെ നിർവഹണം ലളിതമാക്കാൻ കഴിയും.

ബാക്ക്ഗ്രൗണ്ട് സിൻക്രൊണൈസേഷൻ: ഓഫ്‌ലൈൻ മ്യൂട്ടേഷനുകൾ കൈകാര്യം ചെയ്യാം

ഉപയോക്താവ് ഓഫ്‌ലൈനിലായിരിക്കുമ്പോൾ പോലും പശ്ചാത്തലത്തിൽ ജോലികൾ ചെയ്യാൻ ബാക്ക്ഗ്രൗണ്ട് സിൻക്രൊണൈസേഷൻ നിങ്ങളുടെ PWA-യെ അനുവദിക്കുന്നു. ഫോം സമർപ്പണങ്ങൾ, ഡാറ്റ അപ്‌ഡേറ്റുകൾ, നെറ്റ്‌വർക്ക് കണക്റ്റിവിറ്റി ആവശ്യമുള്ള മറ്റ് പ്രവർത്തനങ്ങൾ എന്നിവ കൈകാര്യം ചെയ്യുന്നതിന് ഇത് പ്രത്യേകിച്ചും ഉപയോഗപ്രദമാണ്. നെറ്റ്‌വർക്ക് ലഭ്യമാകുമ്പോൾ നടപ്പിലാക്കേണ്ട ടാസ്ക്കുകൾ രജിസ്റ്റർ ചെയ്യാൻ `BackgroundSyncManager` API നിങ്ങളെ പ്രാപ്തരാക്കുന്നു.

ഒരു ബാക്ക്ഗ്രൗണ്ട് സിങ്ക് ടാസ്ക് രജിസ്റ്റർ ചെയ്യുന്നു

ഒരു ബാക്ക്ഗ്രൗണ്ട് സിങ്ക് ടാസ്ക് രജിസ്റ്റർ ചെയ്യുന്നതിന്, നിങ്ങൾ `BackgroundSyncManager`-ൻ്റെ `register` മെത്തേഡ് ഉപയോഗിക്കേണ്ടതുണ്ട്. ഈ മെത്തേഡ് ഒരു യുണീക്ക് ടാഗ് നെയിം ആർഗ്യുമെൻ്റായി എടുക്കുന്നു. ടാഗ് നെയിം നിർവഹിക്കേണ്ട പ്രത്യേക ടാസ്കിനെ തിരിച്ചറിയുന്നു.

ഉദാഹരണം:

            
self.addEventListener('sync', event => {
  if (event.tag === 'my-sync-task') {
    event.waitUntil(doSomeWork());
  }
});

            

സിങ്ക് ഇവൻ്റ് കൈകാര്യം ചെയ്യുന്നു

ബ്രൗസർ നെറ്റ്‌വർക്ക് കണക്റ്റിവിറ്റി കണ്ടെത്തുമ്പോൾ, അത് സർവീസ് വർക്കറിലേക്ക് ഒരു `sync` ഇവൻ്റ് അയയ്ക്കുന്നു. നിങ്ങൾക്ക് ഈ ഇവൻ്റ് ശ്രദ്ധിക്കുകയും സെർവറിലേക്ക് ഡാറ്റ അയയ്ക്കുന്നത് പോലുള്ള ആവശ്യമായ പ്രവർത്തനങ്ങൾ നടത്തുകയും ചെയ്യാം.

ഉദാഹരണം:

            
async function doSomeWork() {
  // Retrieve data from IndexedDB
  const data = await getDataFromIndexedDB();

  // Send data to the server
  try {
    const response = await fetch('/api/sync', {
      method: 'POST',
      body: JSON.stringify(data),
      headers: {
        'Content-Type': 'application/json'
      }
    });

    if (response.ok) {
      // Clear the data from IndexedDB
      await clearDataFromIndexedDB();
    } else {
      // Handle errors
      console.error('Sync failed:', response.status);
      throw new Error('Sync failed');
    }
  } catch (error) {
    // Handle network errors
    console.error('Network error:', error);
    throw error;
  }
}

            

ഉദാഹരണം: ഓഫ്‌ലൈൻ ഫോം സമർപ്പണം

ഒരു ഉപയോക്താവ് ഓഫ്‌ലൈനിലായിരിക്കുമ്പോൾ ഒരു ഫോം പൂരിപ്പിക്കുന്ന സാഹചര്യം സങ്കൽപ്പിക്കുക. സർവീസ് വർക്കറിന് ഫോം ഡാറ്റ IndexedDB-യിൽ സംഭരിക്കാനും ഒരു ബാക്ക്ഗ്രൗണ്ട് സിങ്ക് ടാസ്ക് രജിസ്റ്റർ ചെയ്യാനും കഴിയും. നെറ്റ്‌വർക്ക് ലഭ്യമാകുമ്പോൾ, സർവീസ് വർക്കർ IndexedDB-യിൽ നിന്ന് ഫോം ഡാറ്റ വീണ്ടെടുക്കുകയും സെർവറിലേക്ക് സമർപ്പിക്കുകയും ചെയ്യും.

  1. ഉപയോക്താവ് ഓഫ്‌ലൈനിലായിരിക്കുമ്പോൾ ഫോം പൂരിപ്പിച്ച് സബ്മിറ്റ് ബട്ടൺ ക്ലിക്ക് ചെയ്യുന്നു.
  2. ഫോം ഡാറ്റ IndexedDB-യിൽ സംഭരിക്കുന്നു.
  3. ഒരു യുണീക്ക് ടാഗ് ഉപയോഗിച്ച് ഒരു ബാക്ക്ഗ്രൗണ്ട് സിങ്ക് ടാസ്ക് രജിസ്റ്റർ ചെയ്യുന്നു (ഉദാ., `form-submission`).
  4. നെറ്റ്‌വർക്ക് ലഭ്യമാകുമ്പോൾ, `sync` ഇവൻ്റ് ട്രിഗർ ചെയ്യപ്പെടുന്നു.
  5. സർവീസ് വർക്കർ IndexedDB-യിൽ നിന്ന് ഫോം ഡാറ്റ വീണ്ടെടുക്കുകയും സെർവറിലേക്ക് സമർപ്പിക്കുകയും ചെയ്യുന്നു.
  6. സമർപ്പണം വിജയകരമാണെങ്കിൽ, ഫോം ഡാറ്റ IndexedDB-യിൽ നിന്ന് നീക്കംചെയ്യുന്നു.

പുഷ് നോട്ടിഫിക്കേഷനുകൾ: സമയോചിതമായ അപ്‌ഡേറ്റുകളിലൂടെ ഉപയോക്താക്കളെ ആകർഷിക്കാം

ബ്രൗസറിൽ ആപ്പ് സജീവമായി പ്രവർത്തിക്കാത്തപ്പോഴും ഉപയോക്താക്കൾക്ക് സമയോചിതമായ അപ്‌ഡേറ്റുകളും സന്ദേശങ്ങളും അയയ്ക്കാൻ പുഷ് നോട്ടിഫിക്കേഷനുകൾ നിങ്ങളുടെ PWA-യെ പ്രാപ്തമാക്കുന്നു. ഇത് ഉപയോക്തൃ ഇടപഴകലും നിലനിർത്തലും ഗണ്യമായി മെച്ചപ്പെടുത്തും. പുഷ് നോട്ടിഫിക്കേഷനുകൾ നൽകുന്നതിന് പുഷ് API-യും നോട്ടിഫിക്കേഷൻസ് API-യും ഒരുമിച്ച് പ്രവർത്തിക്കുന്നു.

പുഷ് നോട്ടിഫിക്കേഷനുകൾക്കായി സബ്‌സ്‌ക്രൈബുചെയ്യുന്നു

പുഷ് നോട്ടിഫിക്കേഷനുകൾ ലഭിക്കുന്നതിന്, ഉപയോക്താക്കൾ ആദ്യം നിങ്ങളുടെ PWA-യ്ക്ക് അനുമതി നൽകണം. ഉപയോക്താക്കളെ പുഷ് നോട്ടിഫിക്കേഷനുകൾക്കായി സബ്‌സ്‌ക്രൈബുചെയ്യാൻ നിങ്ങൾക്ക് `PushManager` API ഉപയോഗിക്കാം.

ഉദാഹരണം:

            
navigator.serviceWorker.ready.then(registration => {
  registration.pushManager.subscribe({
    userVisibleOnly: true,
    applicationServerKey: 'YOUR_PUBLIC_VAPID_KEY'
  })
  .then(subscription => {
    // Send subscription details to your server
    sendSubscriptionToServer(subscription);
  })
  .catch(error => {
    console.error('Failed to subscribe:', error);
  });
});

            

പ്രധാനപ്പെട്ടത്: `YOUR_PUBLIC_VAPID_KEY` എന്നതിന് പകരം നിങ്ങളുടെ യഥാർത്ഥ VAPID (Voluntary Application Server Identification) കീ നൽകുക. നിങ്ങളുടെ ആപ്ലിക്കേഷൻ സെർവറിനെ തിരിച്ചറിയാനും പുഷ് നോട്ടിഫിക്കേഷനുകൾ സുരക്ഷിതമായി അയയ്ക്കുന്നുവെന്ന് ഉറപ്പാക്കാനും VAPID കീകൾ ഉപയോഗിക്കുന്നു.

പുഷ് നോട്ടിഫിക്കേഷനുകൾ കൈകാര്യം ചെയ്യുന്നു

ഒരു പുഷ് നോട്ടിഫിക്കേഷൻ ലഭിക്കുമ്പോൾ, സർവീസ് വർക്കർ ഒരു `push` ഇവൻ്റ് അയയ്ക്കുന്നു. നിങ്ങൾക്ക് ഈ ഇവൻ്റ് ശ്രദ്ധിക്കുകയും ഉപയോക്താവിന് നോട്ടിഫിക്കേഷൻ പ്രദർശിപ്പിക്കുകയും ചെയ്യാം.

ഉദാഹരണം:

            
self.addEventListener('push', event => {
  const payload = event.data ? event.data.text() : 'No payload';

  event.waitUntil(
    self.registration.showNotification('My PWA', {
      body: payload,
      icon: 'icon.png'
    })
  );
});

            

പുഷ് നോട്ടിഫിക്കേഷനുകൾ ഇഷ്ടാനുസൃതമാക്കുന്നു

പുഷ് നോട്ടിഫിക്കേഷനുകളുടെ രൂപവും പെരുമാറ്റവും ഇഷ്ടാനുസൃതമാക്കാൻ നോട്ടിഫിക്കേഷൻസ് API നിങ്ങളെ അനുവദിക്കുന്നു. നിങ്ങൾക്ക് ടൈറ്റിൽ, ബോഡി, ഐക്കൺ, ബാഡ്ജ്, മറ്റ് ഓപ്ഷനുകൾ എന്നിവ വ്യക്തമാക്കാൻ കഴിയും.

ഉദാഹരണം:

            
self.addEventListener('push', event => {
  const data = event.data.json();
  const title = data.title || 'My PWA';
  const options = {
    body: data.body || 'No message',
    icon: data.icon || 'icon.png',
    badge: data.badge || 'badge.png',
    vibrate: [200, 100, 200],
    data: { // Custom data that you can access when the user clicks the notification
      url: data.url || '/'
    },
    actions: [
      {action: 'explore', title: 'Explore this new world',
        icon: 'images/checkmark.png'},
      {action: 'close', title: 'Close',
        icon: 'images/xmark.png'},
    ]
  };

  event.waitUntil(self.registration.showNotification(title, options));
});


self.addEventListener('notificationclick', function(event) {
  event.notification.close();

  // Check if the user clicked on an action.
  if (event.action === 'explore') {
    clients.openWindow(event.notification.data.url);
  } else {
    // Default action: open the app.
    clients.openWindow('/');
  }
});

            

ഉദാഹരണം: ന്യൂസ് അലേർട്ട്

ഒരു വാർത്താ ആപ്ലിക്കേഷന് ബ്രേക്കിംഗ് ന്യൂസ് സ്റ്റോറികളെക്കുറിച്ച് ഉപയോക്താക്കളെ അറിയിക്കാൻ പുഷ് നോട്ടിഫിക്കേഷനുകൾ ഉപയോഗിക്കാം. ഒരു പുതിയ ലേഖനം പ്രസിദ്ധീകരിക്കുമ്പോൾ, സെർവർ ഉപയോക്താവിൻ്റെ ഉപകരണത്തിലേക്ക് ഒരു പുഷ് നോട്ടിഫിക്കേഷൻ അയയ്ക്കുന്നു, അത് ലേഖനത്തിൻ്റെ ഒരു സംഗ്രഹം പ്രദർശിപ്പിക്കുന്നു. ഉപയോക്താവിന് പിന്നീട് നോട്ടിഫിക്കേഷനിൽ ക്ലിക്ക് ചെയ്ത് PWA-യിൽ മുഴുവൻ ലേഖനവും തുറക്കാൻ കഴിയും.

അഡ്വാൻസ്ഡ് സർവീസ് വർക്കർ പാറ്റേണുകൾ

1. ഓഫ്‌ലൈൻ അനലിറ്റിക്സ്

ഉപയോക്താക്കൾ ഓഫ്‌ലൈനിലായിരിക്കുമ്പോൾ പോലും അവരുടെ പെരുമാറ്റം ട്രാക്ക് ചെയ്യുക, അനലിറ്റിക്സ് ഡാറ്റ പ്രാദേശികമായി സംഭരിച്ച് നെറ്റ്‌വർക്ക് ലഭ്യമാകുമ്പോൾ സെർവറിലേക്ക് അയയ്ക്കുക. IndexedDB, ബാക്ക്ഗ്രൗണ്ട് സിങ്ക് എന്നിവ ഉപയോഗിച്ച് ഇത് നേടാനാകും.

2. വേർഷനിംഗും അപ്‌ഡേറ്റിംഗും

നിങ്ങളുടെ സർവീസ് വർക്കറിനായി ഒരു ശക്തമായ വേർഷനിംഗ് സ്ട്രാറ്റജി നടപ്പിലാക്കുക, ഉപയോക്താക്കൾക്ക് അവരുടെ അനുഭവത്തെ തടസ്സപ്പെടുത്താതെ എല്ലായ്പ്പോഴും ഏറ്റവും പുതിയ അപ്‌ഡേറ്റുകൾ ലഭിക്കുന്നുവെന്ന് ഉറപ്പാക്കുക. പഴയ കാഷെ ചെയ്ത അസറ്റുകൾ അസാധുവാക്കാൻ കാഷെ ബസ്റ്റിംഗ് ടെക്നിക്കുകൾ ഉപയോഗിക്കുക.

3. മോഡുലാർ സർവീസ് വർക്കറുകൾ

മെയിൻ്റനബിലിറ്റിയും റീഡബിലിറ്റിയും മെച്ചപ്പെടുത്തുന്നതിന് നിങ്ങളുടെ സർവീസ് വർക്കർ കോഡ് മൊഡ്യൂളുകളായി ഓർഗനൈസ് ചെയ്യുക. ജാവാസ്ക്രിപ്റ്റ് മൊഡ്യൂളുകൾ (ESM) അല്ലെങ്കിൽ വെബ്പാക്ക്, റോൾഅപ്പ് പോലുള്ള ഒരു മൊഡ്യൂൾ ബണ്ട്ലർ ഉപയോഗിക്കുക.

4. ഡൈനാമിക് കാഷിംഗ്

ഉപയോക്തൃ ഇടപെടലുകളെയും ഉപയോഗ രീതികളെയും അടിസ്ഥാനമാക്കി അസറ്റുകൾ ഡൈനാമിക്കായി കാഷെ ചെയ്യുക. ഇത് കാഷെ വലുപ്പം ഒപ്റ്റിമൈസ് ചെയ്യാനും പ്രകടനം മെച്ചപ്പെടുത്താനും സഹായിക്കും.

സർവീസ് വർക്കർ ഡെവലപ്‌മെൻ്റിനുള്ള മികച്ച രീതികൾ

ഉപസംഹാരം

ശക്തവും, മികച്ച പ്രകടനമുള്ളതും, ആകർഷകവുമായ PWA-കൾ നിർമ്മിക്കുന്നതിനുള്ള ശക്തമായ ഉപകരണങ്ങളാണ് ജാവാസ്ക്രിപ്റ്റ് സർവീസ് വർക്കറുകൾ. സർവീസ് വർക്കർ ലൈഫ് സൈക്കിൾ മനസ്സിലാക്കുകയും ഉചിതമായ കാഷിംഗ് സ്ട്രാറ്റജികൾ, ബാക്ക്ഗ്രൗണ്ട് സിൻക്രൊണൈസേഷൻ, പുഷ് നോട്ടിഫിക്കേഷനുകൾ എന്നിവ നടപ്പിലാക്കുകയും ചെയ്യുന്നതിലൂടെ, ഓഫ്‌ലൈൻ സാഹചര്യങ്ങളിൽ പോലും നിങ്ങൾക്ക് അസാധാരണമായ ഉപയോക്തൃ അനുഭവങ്ങൾ സൃഷ്ടിക്കാൻ കഴിയും. ആഗോള ഉപയോക്താക്കൾക്കായി വിജയകരമായ PWA-കൾ നിർമ്മിക്കുന്നതിൽ നിങ്ങളെ നയിക്കുന്നതിനുള്ള പ്രധാന സർവീസ് വർക്കർ പാറ്റേണുകളും മികച്ച രീതികളും ഈ ലേഖനം പര്യവേക്ഷണം ചെയ്തു. വെബ് വികസനം തുടരുന്നതിനനുസരിച്ച്, വെബ് ഡെവലപ്‌മെൻ്റിൻ്റെ ഭാവി രൂപപ്പെടുത്തുന്നതിൽ സർവീസ് വർക്കറുകൾക്ക് കൂടുതൽ പ്രാധാന്യമുണ്ടാകും.

ഈ പാറ്റേണുകൾ നിങ്ങളുടെ പ്രത്യേക ആപ്ലിക്കേഷൻ ആവശ്യകതകൾക്ക് അനുസരിച്ച് മാറ്റം വരുത്താനും എല്ലായ്പ്പോഴും ഉപയോക്തൃ അനുഭവത്തിന് മുൻഗണന നൽകാനും ഓർമ്മിക്കുക. സർവീസ് വർക്കറുകളുടെ ശക്തി പ്രയോജനപ്പെടുത്തുന്നതിലൂടെ, ഉപയോക്താവിൻ്റെ സ്ഥലമോ നെറ്റ്‌വർക്ക് കണക്ഷനോ പരിഗണിക്കാതെ, പ്രവർത്തനക്ഷമമായതും ഉപയോഗിക്കാൻ ആസ്വാദ്യകരവുമായ PWA-കൾ നിങ്ങൾക്ക് സൃഷ്ടിക്കാൻ കഴിയും.

കൂടുതൽ വിവരങ്ങൾക്ക്: